﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UtilZ.Dotnet.Ex.ZLog;

namespace UtilZ.Dotnet.Ex.Communication.Net.Ftp
{
    /// <summary>
    /// 无操作（哑包；通常用来保活）
    /// No operation (dummy packet; used mostly on keepalives).
    /// </summary>
    internal class FtpNOOPCommand : FtpCommandAbs
    {
        /***********************************************************************************************************
        * [NOOP]（NOOP，无操作）命令
        * 说明：这是一条不进行操作的命令，即它什么都不做。
        * 
        * 用法：NOOP<CRLF>
        * 参数：无。
        * 例子：
        * SendData "NOOP" + “/r/n
        * 
        * 注释：NOOP不会影响任何参数或以前输入的命令。除了让服务器发送一条OK应答外，它不指定任何操作。
        * 返回值如下（粗体表示成功）：
        * 200  命令成功。
        * 421  服务不可用，关闭控制连接。
        * 
        * 如果某项服务获知自己即将关闭，会向所有命令做出这个应答。
        * 500  语法错误，无法识别命令。
        * 
        ************************************************************************************************************/


        public FtpNOOPCommand()
            : base()
        {

        }


        protected override string[] GetNames()
        {
            return new string[] { FtpCommands.NOOP };
        }

        protected override IFtpResponse PrimitiveExcute(FtpSession session, string command, string commandLine)
        {
            //Request: noop
            //Response: 200 noop command successful.

            return new FtpCodeResponse(FtpStatusCodes.Code200, "noop command successful");
        }
    }

}
